home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 726-750 / 749 / phxlnk / phxlnk.doc < prev    next >
Text File  |  1995-03-18  |  5KB  |  135 lines

  1.  
  2.                   P h x L n k
  3.  
  4.             AMIGA-DOS Module Linker
  5.  
  6.  
  7.  
  8. Contents
  9. --------
  10.  
  11. I.    Introduction
  12. II.   Usage
  13. III.  Bugs
  14.  
  15.  
  16.  
  17. I. Introduction
  18. ===============
  19.  
  20. This program was written, because I had no Linker which can process object-
  21. modules using the small-code and small-data model in a good time. I have got
  22. the LN-Linker from Manx (Aztec-C), which is too slow, and the public-domain
  23. linker BLink V6.7 which is unable to process small-data modules.
  24. PhxLnk is only 7 kB large, in most cases faster than BLink (31 kB) and many
  25. times faster than LN.
  26. PhxLnk was written in pure assembler-code, assembled with PhxAss V2.11 and
  27. linked with BLink (first version) and PhxLnk itself.
  28.  
  29. PhxLnk is FREEWARE and copyright © 1992 by Frank Wille.
  30. Commercial usage of this program is strictly forbidden!
  31.  
  32.  
  33.  
  34. II. Usage
  35. =========
  36.  
  37. The linker can be used from CLI only. You may copy it to the C-directory of
  38. your workdisk, then type :
  39.  
  40.    PhxLnk [<-options>] <object- or library-module names ...>
  41.  
  42. to start PhxLnk. Starting PhxLnk with no argument or with a single '?' will
  43. display a short instruction.
  44.  
  45. There are two types of modules which can be linked:
  46. o  Object modules with extension ".o" or ".obj" which normally consist of one
  47.    unit. PhxLnk also links object modules with several units.
  48. o  Library modules with extension ".lib" which can consist of any number of
  49.    units. PhxLnk will only include units, if at least one ext_def-symbol is
  50.    referenced in an object module unit or in an already included library unit.
  51.  
  52. The module names can appear in any order, provided the first is an object
  53. module which contains the startup code.
  54.  
  55.  
  56. Options:
  57.  
  58. -o<Name>    Sets the name of the output file. If not specified, the output
  59.         name is the name of the first module without extension,
  60.         e.g. "phxlnk prog1.o prog2.o c.lib m.lib"  will produce a load-
  61.         file with the name "prog1".
  62.  
  63. -c        Normally only the sections of the same type and name will be
  64.         linked together. -c ignores the names of the Code sections,
  65.         they will be linked to one large Code section. Usually -c is set
  66.         when using small-code model.
  67.  
  68. -d        As with -c the section names are ignored, but now for the Data and
  69.         Bss sections. Data and Bss will not be mixed! This large section
  70.         will contain first all the Data and then all the Bss.
  71.         Important! When PhxLnk writes the load-file, only the Data-part of
  72.         this section will be saved. The Bss-part, which is zero in any
  73.         case, must be recreated by the startup code of the program (see
  74.         Linker-Symbols for more information). Nevertheless all pointers
  75.         and references to, or symbols of this section will be calculated
  76.         as if the Bss section were directly behind the Data. -d will be
  77.         needed when using small-data model for both Data and Bss sections.
  78.  
  79. -s        The hunk_symbol($3f0) and hunk_debug($3f1) blocks which contain
  80.         information for a debugger will not be written to the load-file.
  81.  
  82. -b<num>     Sets the maximum number of sections per unit to <num>. The default
  83.         value is 16 (which should be enough for most cases).
  84.  
  85.  
  86. Linker-Symbols:
  87.  
  88. The linker itself creates one ext_def($01xxxxxx) and two ext_abs($02xxxxxx)
  89. symbols which will be needed by the startup code of a program using the small-
  90. data model.
  91.  
  92. _DATA_BAS_  (ext_def) Base address of the Data section.
  93. _DATA_LEN_  (ext_abs) Length of the Data section in Bytes.
  94. _BSS_LEN_   (ext_abs) Length of the (not existing) Bss section in Bytes.
  95.  
  96. The startup code should allocate _DATA_LEN_ + _BSS_LEN_ + 8 Bytes of cleared
  97. memory. Then copy the Data section from _DATA_BAS_ to this new memory space.
  98. As a last step, the new Data/Bss section must be inserted in the segment-list
  99. instead of the old one.
  100.  
  101.  
  102. Small-Data:
  103.  
  104. Small-data symbols can be accessed in a range of 65534 ($fffe) bytes. When a
  105. symbol is outside of this range, the linker will display an error.
  106. The small-data model must be initialized by the startup code. When you're
  107. using A4 as small-data pointer, the initialization would look like this:
  108.  
  109.  lea     SmallDataBase,a4
  110.  lea     32766(a4),a4
  111.  
  112. Don't write "lea  SmallDataBase+32766,a4". Some assemblers could change this
  113. address during optimization.
  114. I chose 32766 instead of 32768, because this is the way most assemblers and
  115. linkers do it (e.g. DICE).
  116.  
  117.  
  118.  
  119. III. Bugs
  120. =========
  121.  
  122. The linker does not support overlay-hunks, something which could be added in
  123. future updates.
  124. I can't guarentee that PhxLnk is working with OS 2.0! No one among my friends
  125. and colleagues is using 2.0, so I had no possibility to test my program with
  126. it.
  127.  
  128. If any errors or questions occur, please write to :
  129.  
  130.             Frank Wille
  131.             Auf dem Dreische 45
  132.             D-W-4900 Herford
  133.             GERMANY
  134.  
  135.